Grid 是一個容器組件,內部包含許多資訊跟交互元素。
並可以讓用戶可以透過
Arrow
Home
End
在容器內中移動。
作為一種泛用的容器組件,
他可以因應各種用途提供較為彈性的鍵盤移動方式。
像是他可以群組化多個 checkboxes,links,
或是較複雜的像是 spreadsheet 應用程式。
雖然在 WAI-ARIA 屬性中用到了 row
跟 column
等字眼,
但使用 role=grid
並不會有視覺上的功用,
他作用是讓輔助科技可以描述這個元件的邏輯架構。
同樣都是表格狀的表現方式,
可以透過以下因素來選擇要實作 grid 或是 table。
grid 大致可以被歸類成兩種類別,
雖說上面兩者的 ARIA roles, states, and properties 都是一樣的,
但根據它們的內容跟用途不同,在鍵盤互動的設計上也會有所不同。
grid 可以用來呈現表格資料像是 欄位標題,列標題。
如果表格資料可以被編輯跟操作,它也尤其適合。
也可以提供一些功能,像是內容編輯,選擇,複製貼上剪下。
在 grid 裡面,每個欄位會包含一個可聚焦的元素,或是他自身可以聚焦,
無關乎他們是否可以編輯或是操作,
這裡有一個例外狀況是:
假如欄位標頭沒有提供像是 排序 或是 過濾 相關的功能時,他們就無需聚焦。
上述的焦點移動,會依照內容來決定焦點要對焦在 格子內的元素 還是 格子本身。
如果 grid 支援 cells
, rows
, columns
,
以下也是常見的鍵盤互動。
grid 可以當做版型,用來群組化某些交互元素,像是 links, button, checkbox 等。
因為整個 grid 只會有一個元素被包含在表序列之中,
將元素透過 grid 群組化可以減少用戶需要按下的 tab 次數。
尤其是在元件會動態加載更多元素的情況,像是購物網站某個元件往下滑時會持續推薦新的產品,這個實作尤其有用。
不同於網格狀資料呈現,將 grid 當作版型時,沒有一定要加上 header cells
作為標頭,
且可能會出現只有一行或是一個格子的情況。
上述的焦點移動,會依照內容來決定焦點要對焦在 格子內的元素 還是 格子本身。
通常網格狀版型不會提供格子選擇的功能。但如果真的需要,常見的鍵盤操作如下:
對使用輔助科技的用戶來說,
在使用 grid 的體驗品質很大程度被 格子的內容 跟 鍵盤對焦到哪 影響。
例如,假如欄位包含了按鈕,但在導航時對焦的對象卻是格子而不是按鈕,
螢幕報讀器閱讀出按鈕的文字內容卻無法通知用戶這個是個按鈕。
這邊有兩種理想情況:
Grids Part 1: To grid or not to grid
中文 | 英文 |
---|---|
表序列 | tab sequence |
元素 | element |
輔助科技 | assistive technologies |
表格狀 | tabular |
組合型 | composite |
組件 | widget |
可聚焦 | focusable |
台灣的無障礙政策還沒有要求在Grid和table上用role, 該跟他們說說了.
有官方的案例,
https://www.w3.org/WAI/ARIA/apg/example-index/grid/dataGrids
和CodePen:
https://codepen.io/pen
另一個可以參考:
https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/grid_role